/**
 * Trabajo de Ingeniería de Software 2
 * Año 2008
 * Sistema de Reserva de Recursos.
 * Desarrolladores: - Marcelo Ferreira.
 *                  - Christian Gómez.
 *                  - Marcelo Rodas.
 */
package modelo;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Clase Entidad SolicitudReserva (JPA)
 * @author jmferreira
 */
@Entity
@Table(name = "solicitudreserva")
@NamedQueries({@NamedQuery(name = "Solicitudreserva.findByIdSolicitudReserva", query = "SELECT s FROM Solicitudreserva s WHERE s.idSolicitudReserva = :idSolicitudReserva"), @NamedQuery(name = "Solicitudreserva.findByFechaInicio", query = "SELECT s FROM Solicitudreserva s WHERE s.fechaInicio = :fechaInicio"), @NamedQuery(name = "Solicitudreserva.findByHoraInicio", query = "SELECT s FROM Solicitudreserva s WHERE s.horaInicio = :horaInicio"), @NamedQuery(name = "Solicitudreserva.findByFechaFin", query = "SELECT s FROM Solicitudreserva s WHERE s.fechaFin = :fechaFin"), @NamedQuery(name = "Solicitudreserva.findByHoraFin", query = "SELECT s FROM Solicitudreserva s WHERE s.horaFin = :horaFin"), @NamedQuery(name = "Solicitudreserva.findByIdAprobador", query = "SELECT s FROM Solicitudreserva s WHERE s.idAprobador = :idAprobador"), @NamedQuery(name = "Solicitudreserva.findByFechaAprobacion", query = "SELECT s FROM Solicitudreserva s WHERE s.fechaAprobacion = :fechaAprobacion"), @NamedQuery(name = "Solicitudreserva.findByHoraAprobacion", query = "SELECT s FROM Solicitudreserva s WHERE s.horaAprobacion = :horaAprobacion"), @NamedQuery(name = "Solicitudreserva.findByObservacion", query = "SELECT s FROM Solicitudreserva s WHERE s.observacion = :observacion")})
public class Solicitudreserva implements SolicitudreservaInterface {

    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "idSolicitudReserva", nullable = false)
    private Integer idSolicitudReserva;
    @Column(name = "fechaInicio", nullable = false)
    @Temporal(TemporalType.DATE)
    private Date fechaInicio;
    @Column(name = "horaInicio", nullable = false)
    @Temporal(TemporalType.TIME)
    private Date horaInicio;
    @Column(name = "fechaFin", nullable = false)
    @Temporal(TemporalType.DATE)
    private Date fechaFin;
    @Column(name = "horaFin", nullable = false)
    @Temporal(TemporalType.TIME)
    private Date horaFin;
    @JoinColumn(name = "idAprobador", referencedColumnName = "idUsuario")
    @ManyToOne
    private Usuario idAprobador;
    @Column(name = "fechaAprobacion")
    @Temporal(TemporalType.DATE)
    private Date fechaAprobacion;
    @Column(name = "horaAprobacion")
    @Temporal(TemporalType.TIME)
    private Date horaAprobacion;
    @Column(name = "observacion")
    private String observacion;
    @Column(name = "idrecurso")
    private Integer idRecurso;
    @Column(name = "useraudita")
    private String userAudita;
    @JoinColumn(name = "idEstadoSolicitud", referencedColumnName = "idEstadoSolicitud")
    @ManyToOne
    private Estadosolicitud idEstadoSolicitud;
    @JoinColumn(name = "idTipoRecurso", referencedColumnName = "idTipoRecurso")
    @ManyToOne
    private Tiporecurso idTipoRecurso;
    @JoinColumn(name = "idSolicitante", referencedColumnName = "idUsuario")
    @ManyToOne
    private Usuario idSolicitante;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idSolicitudReserva")
    private Collection<Reserva> reservaCollection;

    /**
     * Crea una nueva instancia de Solicitudreserva 
     */
    public Solicitudreserva() {
    }

    /**
     * Crea una nueva instancia de Solicitudreserva con valores especificos
     * @param idSolicitudReserva El idSolicitudReserva de la Solicitudreserva
     */
    public Solicitudreserva(Integer idSolicitudReserva) {
        this.idSolicitudReserva = idSolicitudReserva;
    }

    /**
     * Crea una nueva instancia de Solicitudreserva con valores especificos
     * @param idSolicitudReserva El idSolicitudReserva de la Solicitudreserva
     * @param fechaInicio La fechainicio de la Solicitudreserva
     * @param horaInicio La horaInicio de la Solicitudreserva
     * @param fechaFin La fechaFin de la Solicitudreserva
     * @param horaFin La horaFin de la Solicitudreserva
     * @param idAprobador El idAprobador de la Solicitudreserva
     */
    public Solicitudreserva(Integer idSolicitudReserva, Date fechaInicio, Date horaInicio, Date fechaFin, Date horaFin, Usuario idAprobador) {
        this.idSolicitudReserva = idSolicitudReserva;
        this.fechaInicio = fechaInicio;
        this.horaInicio = horaInicio;
        this.fechaFin = fechaFin;
        this.horaFin = horaFin;
        this.idAprobador = idAprobador;
    }

    /**
     * Obtiene el idSolicitudReserva de la Solicitudreserva
     * @return El idSolicitudReserva de la Solicitudreserva
     */
    public Integer getIdSolicitudReserva() {
        return idSolicitudReserva;
    }

    /**
     * Fija el identificador de la Solicitudreserva al valor especificado
     * @param idSolicitudReserva El idSolicitudReserva de la Solicitudreserva
     */
    public void setIdSolicitudReserva(Integer idSolicitudReserva) {
        this.idSolicitudReserva = idSolicitudReserva;
    }

    /**
     * Obtiene la fechaInicio de la Solicitudreserva
     * @return La fechaInicio de la Solicitudreserva (dd/mm/yyyy)
     */
    public Date getFechaInicio() {
        return fechaInicio;
    }

    /**
     * Fija la fechaInicio de la Solicitudreserva al valor especificado
     * @param fechaInicio La fechaInicio de la Solicitudreserva (dd/mm/yyyy)
     */
    public void setFechaInicio(Date fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    /**
     * Obtiene la horaInicio de la Solicitudreserva
     * @return La horaInicio de la Solicitudreserva (hh:mm)
     */
    public Date getHoraInicio() {
        return horaInicio;
    }

    /**
     * Fija la horaInicio de la Solicitudreserva al valor especificado
     * @param horaInicio La horaInicio de la Solicitudreserva (hh:mm)
     */
    public void setHoraInicio(Date horaInicio) {
        this.horaInicio = horaInicio;
    }

    /**
     * Obtiene la fechaFin de la Solicitudreserva
     * @return La fechaFin de la Solicitudreserva (dd/mm/yyyy)
     */
    public Date getFechaFin() {
        return fechaFin;
    }

    /**
     * Fija la fechaFin de la Solicitudreserva al valor especificado
     * @param fechaFin La fechaFin de la Solicitudreserva (dd/mm/yyyy)
     */
    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    /**
     * Obtiene la horaFin de la Solicitudreserva
     * @return La horaFin de la Solicitudreserva (hh:mm)
     */
    public Date getHoraFin() {
        return horaFin;
    }

    /**
     * Fija la hora de finalizacion de la Solicitudreserva al valor especificado
     * @param horaFin La hora de finalizacion de la Solicitudreserva (hh:mm)
     */
    public void setHoraFin(Date horaFin) {
        this.horaFin = horaFin;
    }

    /**
     * Obtiene el idAprobador de la Solicitudreserva
     * @return El idAprobador de la Solicitudreserva
     */
    public Usuario getIdAprobador() {
        return idAprobador;
    }

    /**
     * Fija el idAprobador de la Solicitudreserva al valor especificado
     * @param idaprobador El idAprobador de la Solicitudreserva
     */
    public void setIdAprobador(Usuario idaprobador) {
        this.idAprobador = idaprobador;
    }

    /**
     * Obtiene la fechaAprobacion de la Solicitudreserva
     * @return La fechaAprobacion de la Solicitudreserva (dd/mmm/yyyy)
     */
    public Date getFechaAprobacion() {
        return fechaAprobacion;
    }

    /**
     * Fija la fechaAprobacion de la Solicitudreserva al valor especificado
     * @param fechaAprobacion La fechaAprobacion de la reserva
     */
    public void setFechaAprobacion(Date fechaAprobacion) {
        this.fechaAprobacion = fechaAprobacion;
    }

    /**
     * Obtiene la horaAprobacion de la Solicitudreserva
     * @return La horaAprobacion de la Solicitudreserva (hh:mm)
     */
    public Date getHoraAprobacion() {
        return horaAprobacion;
    }

    /**
     * Fija la horaAprobacion de la Solicitudreserva al valor especificado
     * @param horaAprobacion La horaAprobacion de la Solicitudreserva (hh:mm)
     */
    public void setHoraAprobacion(Date horaAprobacion) {
        this.horaAprobacion = horaAprobacion;
    }

    /**
     * Obtiene el valor de la observacion de la Solicitudreserva
     * @return El valor de la observacion de la Solicitudreserva
     */
    public String getObservacion() {
        return observacion;
    }

    /**
     * Fija el valor de la observacion de la Solicitudreserva
     * @param observacion La observacion de la Solicitudreserva
     */
    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

    /**
     * Obtiene el idEstadoSolicitud de la Solicitudreserva
     * @return El idEstadoSolicitud de la Solicitudreserva
     */
    public Estadosolicitud getIdEstadoSolicitud() {
        return idEstadoSolicitud;
    }

    /**
     * Fija el idEstadoSolicitud de la Solicitudreserva al valor especificado
     * @param idEstadoSolicitud El estado de la Solicitudreserva
     */
    public void setIdEstadoSolicitud(Estadosolicitud idEstadoSolicitud) {
        this.idEstadoSolicitud = idEstadoSolicitud;
    }

    /**
     * Obtiene el idTipoRecurso de la Solicitudreserva
     * @return El idTipoRecurso de la Solicitudreserva
     */
    public Tiporecurso getIdTipoRecurso() {
        return idTipoRecurso;
    }

    /**
     * Obtiene el idTipoRecurso de la Solicitudreserva
     * @param idTipoRecurso El tipo de recurso de la Solicitudreserva
     */
    public void setIdTipoRecurso(Tiporecurso idTipoRecurso) {
        this.idTipoRecurso = idTipoRecurso;
    }

    /**
     * Obtiene el idSolicitante de la Solicitudreserva
     * @return El idSolicitante de la Solicitudreserva
     */
    public Usuario getIdSolicitante() {
        return idSolicitante;
    }

    /**
     * Fija el idSolicitante de la Solicitudreserva al valor especificado
     * @param idSolicitante El idSolicitante de la Solicitudreserva
     */
    public void setIdSolicitante(Usuario idSolicitante) {
        this.idSolicitante = idSolicitante;
    }

    /**
     * Obtiene una reservaCollection de la Solicitudreserva
     * @return La reservaCollection de la Solicitudreserva
     */
    public Collection<Reserva> getReservaCollection() {
        return reservaCollection;
    }

    /**
     * Fija la reservaCollection de la Solicitudreserva al valor especificado
     * @param reservaCollection La reservaCollection de la Solicitudreserva
     */
    public void setReservaCollection(Collection<Reserva> reservaCollection) {
        this.reservaCollection = reservaCollection;
    }

    /**
     * Retorna un valor de Hash para el objeto.
     * Esta implementacion evalua un valor hash basado sobre los campos id en este objeto
     * @return Un valor de hash para este objeto
     */
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idSolicitudReserva != null ? idSolicitudReserva.hashCode() : 0);
        return hash;
    }

    /**
     * Determina si otro objeto es igual a Solicitudreserva. El resultado es
     * <code>true</code> si y solo si el argumento no es nulo y es un objeto Solicitudreserva
     * que tiene el mismo valor del campo id en este objeto.
     * @param object La referencia objeto con el cual comparar
     * @return <code>true</code> Si este objeto es la misma que su argumento;
     * <code>false</code> si no lo es.
     */
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Solicitudreserva)) {
            return false;
        }
        Solicitudreserva other = (Solicitudreserva) object;
        if ((this.idSolicitudReserva == null && other.idSolicitudReserva != null) || (this.idSolicitudReserva != null && !this.idSolicitudReserva.equals(other.idSolicitudReserva))) {
            return false;
        }
        return true;
    }

    /**
     * Retorna una representacion String de este objeto.  Esta implementacion This implementation construye
     * la representacion basada en los campos id.
     * @return Una representacion String del objeto.
     */
    @Override
    public String toString() {
        return "[idSolicitudReserva=" + idSolicitudReserva + "]";
    }

    /**
     * Fija el IdRecurso de la Solicitudreserva al valor especificado
     * @param idrecurso El idRecurso de la Solicitudreserva
     */
    public void setIdRecurso(Integer idrecurso) {
        this.idRecurso = idrecurso;
    }

    /**
     * Obtiene el IdRecurso de la Solicitudreserva
     * @return El idRecurso de la Solicitudreserva
     */
    public Integer getIdRecurso() {
        return idRecurso;
    }

    /**
     * Fija el userAudita de la Solicitudreserva al valor especificado
     * @param userAudita El userAudita de la Solicitudreserva
     */
    public void setUserAudita(String userAudita) {
        this.userAudita = userAudita;
    }

    /**
     * Obtiene el userAudita de la Solicitudreserva
     * @return El userAudita de la Solicitudreserva
     */
    public String getUserAudita() {
        return userAudita;
    }
}
